<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>深拷贝-递归实现深拷贝</title>
</head>

<body>
  <script>
    // 递归实现深拷贝 - 简版实现对象和数组的拷贝
    const obj = {
      name: '佩奇',
      family: {
        father: '猪爸爸'
      },
      hobby: ['跳泥坑', '唱歌'],
    }

    // // 封装深拷贝函数 cloneDeep()
    // function cloneDeep(oldObj) {
    //   // 判断是数组还是对象
    //   const newObj = Array.isArray(oldObj) ? [] : {}
    //   for(let k in oldObj){
    //       if(typeof oldObj[k] === 'object'){
    //           newObj[k] = cloneDeep(oldObj[k])
    //       }
    //       else{
    //         newObj[k] = oldObj[k]
    //       }
    //   }
    //   return newObj
    // }
    // const res = cloneDeep(obj)
    // console.log(res)

    // function cloneDeep(oldObj) {
    //   // 判断拷贝的对象是数组还是函数
    //   const newObj = Array.isArray(oldObj) ? [] : {}
    //   for(let k in oldObj){
    //     // console.log(k,oldObj[k])  // k 属性名 oldObj[k]属性值
        
    //     // 把属性名和值添加给新对象newObj
    //     // 过渡1：给newObj 添加了name属性 值是lw
    //     // newObj.name = 'lw'

    //     // 过渡2：给newObj添加name属性，值是data.name
    //     // newObj.name = oldObj.name
        
    //     if(typeof oldObj[k] === 'object'){
    //       newObj[k] = cloneDeep(oldObj[k])
    //     }else{
    //       newObj[k] = oldObj[k]
    //     }
       
    //   }

    //   // 经过一系列的处理，得到返回结果
    //   return newObj
    // }
    // const res = cloneDeep(obj)
    // res.family.father = '猪猪侠'
    // console.log(res)
    // console.log(obj)

    function cloneDeep(oldObj){
      const newObj = Array.isArray(oldObj) ? [] : {}
      for(let k in oldObj){
        if(typeof oldObj[k] === 'object'){
          newObj[k] = cloneDeep(oldObj[k])
        }
        else{
          newObj[k] = oldObj[k]
        }
      }
      return newObj
    }
    const res = cloneDeep(obj)
    console.log(res)
    
  </script>
</body>

</html>